/*
 * @(#)ConditionInfo.java $version 2010. 8. 11
 *
 * Copyright 2007-2010 NHN Corp. All rights Reserved. 
 * NHN PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.
 */
package com.nhncorp.usf.core.config.runtime;

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;

/**
 * 페이지 분기를 위한 조건 정보.
 *
 * @author Web Platform Development Team.
 */
public class ConditionInfo implements ResultCondition {

    /**
     * 조건문으로 Ognl의 Expression Language 를 이용해 표현한 값.
     */
    String condition;

    /**
     * 조건문 만족시 이동할 페이지 정보.
     */
    ResultPageInfo resultPageInfo;

    ScriptInfo scriptInfo;

    /** 중첩 {@link ResultCondition} */
	private List<ResultCondition> subConditions;

    /**
     * 생성자
     */
    public ConditionInfo(String condition, ResultPageInfo page) {
        this.condition = condition;
        this.resultPageInfo = page;
    }

    public ConditionInfo(String condition) {
    	this.condition = condition;
	}

	/**
     * 조건문 반환.
     *
     * @return condition 조건 식
     */
    public String getCodition() {
        return this.condition;
    }

    /**
     * 조건 만족시 이동할 페이지 정보 반환.
     *
     * @return result page information
     */
    public ResultPageInfo getResultPageInfo() {
        return this.resultPageInfo;
    }

    /**
     * Gets the script info.
     *
     * @return the script info
     */
    public ScriptInfo getScriptInfo() {
        return scriptInfo;
    }

    /**
     * Sets the script info.
     *
     * @param scriptInfo the new script info
     */
    public void setScriptInfo(ScriptInfo scriptInfo) {
        this.scriptInfo = scriptInfo;
    }

	@Override
	public ResultConditionType getResultType() {
		return ResultConditionType.condition;
	}

	/**
	 * {@link ConditionInfo} 에 하위 {@link ResultCondition} 를 추가한다.
	 * 
	 * @param subCondition 하위에 추가할 {@link ResultCondition}
	 * */
	public void addSubCondition(ResultCondition subCondition) {
		if (subConditions == null) {
			subConditions = new ArrayList<ResultCondition>();
		}
		
		subConditions.add(subCondition);
	}
	
	/**
	 * @return {@link ConditionInfo} 에 하위 {@link ResultCondition} 를  반환한다.
	 * */
	public List<ResultCondition> getSubConditions() {
		if (subConditions == null) {
			return Collections.emptyList();
		} 
		
		return subConditions;
	}
}
